import { getLocalStorage } from "./storage";
import BASE from "./base";
import Tiff from 'tiff.js'
import { showLoading, hideLoading } from "@/utils/loading";
import { Message, MessageBox } from "element-ui"
/**
 * 获取到文件流进行转换，可以进行下载，展示，新开页面，过期
 * @param {*} path 路径 
 * @param {*} isDown 是否下载 
 * @param {*} fileName 文件名（须带后缀）
 * @param {*} time 过期时间
 * @param {*} isOpenNewBlank 是否新的页面打开 
 * @returns 
 */


// downData(row) {
//     let name = row.name + "." + row.ext;
//     let url = row.sourcePath;
//     this.$downFileByBlob({ path: url, isDown: true, fileName: name, isOpenNewBlank: false })
//   },
export const downFileByBlob = ({ path, isDown, fileName, time, isOpenNewBlank }) => {
    console.log('path', path);
    // 假设你的服务器端点接受POST请求并返回PDF  
    // const url = 'http://192.168.33.89:8085/api/File/getFileStream'; // 你的服务器地址  
    const url = `${BASE.IP}/api/File/getFileStream`; // 你的服务器地址  

    // POST数据（如果有的话）  
    const postData = JSON.stringify({
        // 这里是你要发送的数据
        // 例如: key: 'value'  
        url: path
    });
    let token = getLocalStorage('token')
    fetch(url, {
        method: 'POST', // 或者 'PUT'  
        headers: {
            'Content-Type': 'application/json',
            // 如果服务器需要其他的头部信息，可以在这里添加  
            // 设置其他请求头，如 'Content-Type': 'application/json'（対于POST请求）  
            'Authorization': `Bearer ${token}`, // 如果需要的话  
            // 注意：Fetch API不会自动处理cookies，你需要手动处理  
            // 但浏览器通常会在同源请求中自动发送cookies  
            // 如果你需要在跨域请求中发送cookies，你需要在服务器端设置CORS策略来允许credentials  
            'Credentials': 'include' // 注意：这不是一个有效的Fetch API header，而是CORS策略的一部分    
        },
        body: postData
    })
        .then(response => {
            console.log('downFIleByBlob', response, response.status);
            if (response.status != 0) {
                // let m = 'ファイルが存在しない可能性があります'
                // try {
                //     m = response.statusText.replace(/\r\n/g, '<br/>');
                // } catch (error) {
                // }
                // MessageBox.alert(m, '', {
                //     confirmButtonText: 'OK',
                //     type: 'warning',
                //     dangerouslyUseHTMLString: true,
                //     callback: action => {
                //     }
                // })
                // return
                // throw new Error(`HTTP error! status: ${response.status}`);
            }
            // 返回一个Blob対象，表示PDF文件的内容  
            return response.blob();
        })
        .then(blob => {
            console.log('blob', blob);
            if (blob.size == 0 || !blob) {
                // MessageBox.alert('ファイルが存在しない可能性があります', '', {
                //     confirmButtonText: 'OK',
                //     type: 'warning',
                //     dangerouslyUseHTMLString: true,
                //     callback: action => {
                //     }
                // })
                return
            }
            // 创建一个可下载文件的 URL
            const url = window.URL.createObjectURL(blob);
            if (isOpenNewBlank) {
                // 在新标签页中打开文件
                // window.open(url);
                window.open(url, '_blank');
            }

            // 创建一个指向Blob対象的URL  
            if (isDown) {
                // 创建一个a标签用于下载  
                const a = document.createElement('a');
                a.href = url;
                a.download = fileName; // 设置下载文件的名称  
                a.style.display = 'none';
                // 触发a标签的点击事件来下载文件  
                document.body.appendChild(a);
                a.click();
            }
            // 清理  
            if (time) {
                setTimeout(function () {
                    window.URL.revokeObjectURL(url);
                    console.log('Blob URL has been revoked.');
                }, time); // 5000 毫秒 = 5 秒  
            }
        })
        .catch(error => {
            console.error('There has been a problem with your fetch operation:', error);
        });
}
function arrayBufferToBase64(buffer) {
    let binary = '';
    const bytes = new Uint8Array(buffer);
    const len = bytes.byteLength;
    for (let i = 0; i < len; i++) {
        binary += String.fromCharCode(bytes[i]);
    }
    return window.btoa(binary);
}
export const getBlobPath = async ({ path, isTIFF, isReport }) => {
    showLoading();
    console.log('path', path);
    // 假设你的服务器端点接受POST请求并返回PDF  
    // const url = 'http://192.168.33.89:8085/api/File/getFileStream'; // 你的服务器地址  
    const url = `${BASE.IP}/api/File/getFileStream`; // 你的服务器地址  

    // POST数据（如果有的话）  
    const postData = JSON.stringify({
        // 这里是你要发送的数据
        // 例如: key: 'value'  
        url: path
    });
    let token = getLocalStorage('token')
    let response = await fetch(url, {
        method: 'POST', // 或者 'PUT'  
        headers: {
            'Content-Type': 'application/json',
            // 如果服务器需要其他的头部信息，可以在这里添加  
            // 设置其他请求头，如 'Content-Type': 'application/json'（対于POST请求）  
            'Authorization': `Bearer ${token}`, // 如果需要的话  
            // 注意：Fetch API不会自动处理cookies，你需要手动处理  
            // 但浏览器通常会在同源请求中自动发送cookies  
            // 如果你需要在跨域请求中发送cookies，你需要在服务器端设置CORS策略来允许credentials  
            'Credentials': 'include' // 注意：这不是一个有效的Fetch API header，而是CORS策略的一部分    
        },
        body: postData
    })
    var resultPath = ''
    console.log('!isTIFF', !isTIFF);

    if (!isTIFF && !isReport) {
        let BloB = await response.blob();
        console.log('response', response);
        console.log('BloB', BloB);
        resultPath = window.URL.createObjectURL(BloB);
    }
    if (!isTIFF && isReport) {
        const buffer = await response.arrayBuffer()
        let base64 = arrayBufferToBase64(buffer);
        let mediaType = "image/jpeg"; // 或者其他 MIME 类型，如 "image/png"  
        resultPath = `data:${mediaType};base64,${base64}`;
    }

    if (isTIFF) {
        const buffer = await response.arrayBuffer()
        const tiff = new Tiff({ buffer: buffer })
        resultPath = tiff.toDataURL()
    }

    setTimeout(() => {
        hideLoading();
    }, 500);
    return resultPath

}